package model.kwalificatiebeheer;

import java.util.Observable;
import java.util.TreeMap;

public class Werkproces extends Observable implements Comparable<Werkproces>{
	/**
	 * Variables
	 */
	private int id;
	private String titel;
	private String omschrijving;
	private String gewensteResultaat;
	private String vakkennisVaardigheden;
	private TreeMap<Competentie, Criterium> competentieCriteria = new TreeMap<Competentie, Criterium>();
	
	/**
	 * Constructors
	 */
	public Werkproces(int id) {
		this(id, "");
	}
	
	public Werkproces(int id, String titel){
		this.id = id;
		this.titel = titel;
	}
	
	public Werkproces(int id, String titel, String omschrijving, String gewensteResultaat, String vakkennisVaardigheden){
		this.id = id;
		this.titel = titel;
		this.omschrijving = omschrijving;
		this.gewensteResultaat = gewensteResultaat;
		this.vakkennisVaardigheden = vakkennisVaardigheden;
	}

	/**
	 * Getters and Setters
	 */
	public int getId() {
		return id;
	}
	public String getTitel() {
		return titel;
	}
	public void setTitel(String titel) {
		this.titel = titel;
		setChanged();
		notifyObservers();
	}
	public String getOmschrijving() {
		return omschrijving;
	}
	public void setOmschrijving(String omschrijving) {
		this.omschrijving = omschrijving;
		setChanged();
		notifyObservers();
	}
	public String getGewensteResultaat() {
		return gewensteResultaat;
	}
	public void setGewensteResultaat(String gewensteResultaat) {
		this.gewensteResultaat = gewensteResultaat;
		setChanged();
		notifyObservers();
	}
	public String getVakkennisVaardigheden() {
		return vakkennisVaardigheden;
	}
	public void setVakkennisVaardigheden(String vakkennisVaardigheden) {
		this.vakkennisVaardigheden = vakkennisVaardigheden;
		setChanged();
		notifyObservers();
	}
	public TreeMap<Competentie, Criterium> getCompetentieCriteria() {
		return competentieCriteria;
	}

	public void setCompetentieCriteria(
		TreeMap<Competentie, Criterium> competentieCriteria) {
		this.competentieCriteria = competentieCriteria;
		setChanged();
		notifyObservers();
	}
	
	/**
	 * @Override
	 * @name: 		toString
	 * @description:Creates String from Werkproces
	 * @return:		String
	 */
	public String toString(){
		return "\n Werkproces {\n" +
				"  id: " + id + "\n"+
				"  titel: " + titel + "\n"+
				" }\n";
	}
	
	/**
	 * @Override
	 * @name: 		compareTo
	 * @description:Compares given Object to this
	 * 				Object. Returns 0 if equals, 
	 * 				returns id if not equals.
	 * @return:		String
	 */
	public int compareTo(Werkproces wp) {
		return wp.getId() == id ? 0 : id;
	}
	
	/**
	 * @name: 		addCompetentie
	 * @param:		Competentie com
	 * 				Criterium cri
	 * @description:Adds given competentie and criterium
	 * 				to TreeMap competentieCriteria
	 * @return:		Void
	 */
	public void addCompetentie(Competentie com, Criterium cri){
		competentieCriteria.put(com, cri);
		setChanged();
		notifyObservers();
	}
	public void deleteCompetentie(Competentie com){
		competentieCriteria.remove(com);
		setChanged();
		notifyObservers();
	}
	public void update(String titel, String omschrijving, String gewensteResultaat, String vakkennisVaardigheden){
		this.titel = titel;
		this.omschrijving = omschrijving;
		this.gewensteResultaat = gewensteResultaat;
		this.vakkennisVaardigheden = vakkennisVaardigheden;
		setChanged();
		notifyObservers();
	}
}
